home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / Make / source / w32 / subproc / w32err.c < prev   
Encoding:
C/C++ Source or Header  |  1997-04-07  |  1.2 KB  |  52 lines

  1. #include <windows.h>
  2. #include "w32err.h"
  3.  
  4. /*
  5.  * Description: the windows32 version of perror()
  6.  *
  7.  * Returns:  a pointer to a static error
  8.  *
  9.  * Notes/Dependencies:  I got this from 
  10.  *      comp.os.ms-windows.programmer.win32
  11.  */
  12. char * 
  13. map_windows32_error_to_string (DWORD ercode) {
  14. /* __declspec (thread) necessary if you will use multiple threads */
  15. __declspec (thread) static char szMessageBuffer[128];
  16.  
  17.     /* Fill message buffer with a default message in 
  18.      * case FormatMessage fails 
  19.      */
  20.     wsprintf (szMessageBuffer, "Error %ld", ercode);
  21.  
  22.     /*
  23.      *  Special code for winsock error handling.
  24.      */
  25.     if (ercode > WSABASEERR) {
  26.         HMODULE hModule = GetModuleHandle("wsock32");
  27.         if (hModule != NULL) {
  28.             FormatMessage(FORMAT_MESSAGE_FROM_HMODULE,
  29.                 hModule,
  30.                 ercode,
  31.                 LANG_NEUTRAL,
  32.                 szMessageBuffer,
  33.                 sizeof(szMessageBuffer),
  34.                 NULL);
  35.             FreeLibrary(hModule);
  36.         } 
  37.     } else {
  38.         /*
  39.          *  Default system message handling
  40.          */
  41.         FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
  42.                   NULL,
  43.                   ercode,
  44.                   LANG_NEUTRAL,
  45.                   szMessageBuffer,
  46.                   sizeof(szMessageBuffer),
  47.                   NULL);
  48.     }
  49.     return szMessageBuffer;
  50. }
  51.  
  52.